IA generativa como asistente de análisis de datos en R
¿Qué es?
Sistemas de Inteligencia Artificial Generativa (como Gemini, Chatgpt, Claude y otros) capaces de crear contenido nuevo (texto, código, imágenes) a partir de un prompt.
En nuestro contexto (lenguaje R con tidyverse)
Es una herramienta poderosa para traducir peticiones complejas sobre análisis de datos en código R funcional.
Convierte el lenguaje natural en el lenguaje de programación que necesitamos para el análisis en salud.
Beneficios de la IA en análisis de datos
Ventaja
Descripción
Acelera el aprendizaje
Permite obtener código funcional inmediato para tareas básicas (filtrar, resumir, graficar), reduciendo la frustración inicial de la sintaxis de R
Eficiencia y productividad
Genera código para tareas repetitivas o tediosas, liberando tiempo para enfocarse en la interpretación de los resultados
Descubrimiento de funciones
Puede sugerir el uso de funciones y paquetes tidyverse que el usuario no conocía, ampliando la caja de herramientas del analista
Traducción de ideas
Es útil para traducir conceptos epidemiológicos (“quiero un gráfico de la evolución temporal de casos”) a la lógica de programación requerida.
Cuidados y uso responsable (riesgos)
El “Riesgo de la alucinación” (fallo de código):
Cuidado: La IA puede generar código incorrecto, obsoleto o que no se ajusta a las últimas versiones de tidyverse.
Acción: Siempre ejecuta y verifica el código línea por línea. No copiar y pegar sin entender.
Cuidados y uso responsable (riesgos)
El principio de la Caja Negra (opacidad):
Cuidado: Confiar ciegamente en el código genera una dependencia que inhibe el aprendizaje profundo de R y la lógica de programación. (pereza cognitiva)
Acción: La IA debe ser una herramienta para aprender, no un reemplazo de la comprensión. El objetivo es comprender la lógica de cada función generada.
Cuidados y uso responsable (riesgos)
Privacidad y datos sensibles (ética):
Cuidado: NUNCA ingreses datos reales (incluso anonimizados) o sensibles de pacientes en el prompt de una IA pública.
Acción: Usa datos ficticios o descripciones de la estructura del data frame (ej. “tengo una columna edad numérica y una columna diagnostico categórica”).
Cuidados y uso responsable (riesgos)
Sesgos y contexto:
Cuidado: La IA no comprende el contexto epidemiológico o clínico complejo. El código puede ser correcto, pero la interpretación sigue siendo responsabilidad humana.
Acción: El prompt debe ser lo más específico posible para mitigar ambigüedades. La validación del resultado final es indispensable.
La Regla de Oro: Vos sos el experto!
La IA genera código, pero como epidemiólogos nosotros generamos el conocimiento y somos responsables de lo que publiquemos.
Entender el código.
Verificar los resultados.
No compartir información confidencial.
¿Qué es un Prompt?
Una instrucción, pregunta o entrada de texto que se proporciona a un modelo de Inteligencia Artificial (IA) generativa para obtener una respuesta, código o salida específica.
Con más detalle
El prompt es el input que guía la generación de la IA.
Es la formulación del problema o la solicitud que especifica el contexto (p.ej., lenguaje R, tidyverse), el objetivo (p.ej., filtrar datos, crear un gráfico) y las restricciones (p.ej., formato de salida) para asegurar que el resultado sea preciso y relevante para la tarea requerida.
Dentro de nuestro contexto
El prompt en la generación de código
Para la programación, el prompt es la especificación precisa que le indica a la IA:
Qué hacer (ej. calcular la media).
Cómo hacerlo (ej. usar el paquete dplyr).
Con qué datos (ej. data frame datos_salud y columna edad).
Fundamentos de ingeniería de prompts avanzada
La “personalidad” del prompt (Actuar como..)
Instruir a la IA para que asuma un rol mejora la calidad y el formato de la respuesta.
Principio: Pídele a la IA que actúe como un experto en la materia.
Ejemplo para incluir: “Actúa como un analista de datos senior en salud experto en R y tidyverse. Solo responde con el código R requerido y una breve explicación de por qué funciona.”
Beneficio: Fomenta la generación de código más robusto, idiomático (usando las mejores prácticas de tidyverse, como el operador pipe %>% o |> en lugar de código base R), y bien documentado.
Fundamentos de ingeniería de prompts avanzada
Especificación del formato de salida
Define exactamente cómo quieres que se entregue el código.
Principio: Limita la verbosidad y enfoca la respuesta en lo esencial.
Ejemplos de restricciones:
“No incluyas explicaciones largas; solo el código.”
“Envuelve el código en un bloque de código.”
“Genera una función que realice..”
Beneficio: Hace que el código sea directamente copiable y utilizable en RStudio, minimizando el tiempo de limpieza y edición.
Fundamentos de ingeniería de prompts avanzada
Instrucciones para la gestión de errores (ej: Manejo de valores faltantes)
En el ámbito de la salud, los valores perdidos (NA) son comunes y críticos. El prompt debe considerar cómo tratarlos.
Principio: Anticipar problemas comunes de datos y pedir a la IA que implemente soluciones.
Ejemplo: “Antes de calcular el promedio de la variable IMC, añade un argumento para eliminar o ignorar los valores perdidos (NA) en esa variable.”
(Esto fuerza el uso de argumentos como na.rm = T en funciones como mean().)
Beneficio: Evita errores comunes que detendrían el análisis o salidas tipo NA.
Fundamentos de ingeniería de prompts avanzada
Iteración y refinamiento (“la conversación”)
La ingeniería de prompts no es solo un prompt único, sino una conversación.
Principio: Los usuarios deben aprender a corregir o mejorar la respuesta de la IA en la siguiente pregunta.
Ejemplos de seguimiento:
“El código que me diste usa mean(). Cámbialo para usar la función median() de dplyr en su lugar.”
“En el gráfico de barras anterior, por favor, ordena las barras de forma descendente por el conteo.”
“El gráfico es muy básico. Añade un tema (theme_minimal()) y cambia el color de las barras a azul marino (#003366).”
Beneficio: Demuestra que la IA es una herramienta interactiva, no mágica. Enseña a depurar y a mejorar la estética de las visualizaciones.
Fundamentos de ingeniería de prompts avanzada
Pensamiento crítico y verificación (el límite de la IA)
El principio más importante es que el código generado por IA debe ser revisado y entendido.
Principio: La IA puede cometer errores (alucinaciones) o usar métodos ineficientes/obsoletos.
NUNCA EJECUTEN CÓDIGO QUE NO ENTIENDAN
Deben verificar que los paquetes sean correctos.
Deben verificar que las funciones (filter(), mutate(), ggplot(), etc.) hagan exactamente lo que necesitan.
Beneficio: Fomenta la alfabetización en código y asegura la validez científica y la seguridad del análisis de datos en nuestra práctica.
Resumen
Contexto de lenguaje y paquetes: Especificar siempre que se necesita código R usando las librerías del tidyverse u otras.
Estructura de los datos (input): Describir el input. ¿Cómo se llama el data frame? ¿Cuáles son los nombres de las variables que van a usar? ¿Qué tipo de datos contienen (numéricos, categóricos, fechas)?
Tarea específica (gestión/análisis): Indicar claramente qué se quiere lograr con el código (filtrar, agrupar, calcular la media, crear un gráfico, etc.).
Resultado esperado (output): Mencionar cómo se espera que sea la salida. ¿Un nuevo data frame? ¿Una tabla resumida? ¿Un gráfico específico?
Ejemplo de prompt
“Actúa como un analista de datos senior en salud experto en R y tidyverse. Solo responde con el código R requerido y una breve explicación de por qué funciona. Necesito código para el data frame sisa_dengue que me permita convertir todas las variables de fecha tipo character con formato dd/mm/aaaa en Date.”
Ejemplo para lograr una función
“Actúa como un analista de datos senior en salud experto en R y tidyverse. Solo responde con el código R requerido para crear una función reutilizable y una breve explicación de por qué funciona. La función debe llamarse convertir_fechas_dmy, aceptar como único argumento un data frame, y devolver el data frame con todas las variables de tipo character con formato dd/mm/aaaa convertidas a tipo Date utilizando lubridate::dmy(). La función debe utilizar la estructura dplyr::mutate(across(..)) y debe ser robusta que cumplen dos condiciones simultáneas: 1) su tipo de dato es character Y 2) su nombre contiene la subcadena fecha en minúsculas.”
La función utiliza un bloque if separado para cada paquete. La condición if (!requireNamespace("paquete")) verifica si el paquete está instalado en el sistema. Si no lo está, se ejecuta install.packages().
Después de la verificación/instalación, require(paquete) carga el paquete en la sesión para que sus funciones (como mutate y dmy) puedan ser utilizadas en la transformación de datos de forma “silenciosa”.
Luego utiliza mutate(across()) para la transformación. El selector de columnas, where(is.character) & contains("fecha"), es la clave.
Explicación del código
La notación & (AND) se usa dentro de across para filtrar solo las columnas que satisfacen ambas condiciones:
ser de tipo texto (character) y tener la palabra “fecha” en su nombre, evitando así transformar otras variables de texto no relacionadas con fechas.
Extra: prompt para aprender un tema
“Actúa como un tutor experto que me ayude a dominar cualquier tema a través de un curso interactivo en estilo entrevista. El proceso debe ser recursivo y personalizado.
Esto es lo que quiero que hagas:
Pregúntame por un tema que quiero aprender.
Divide ese tema en un plan de estudios estructurado con lecciones progresivas, empezando por los fundamentos y avanzando hacia conceptos más avanzados.
Extra: prompt para aprender un tema
Para cada lección:
Explica el concepto de manera clara y concisa, usando analogías y ejemplos del mundo real.
Hazme preguntas para evaluar y profundizar mi comprensión. -Dame un ejercicio corto o un experimento mental para aplicar lo que he aprendido.
Pregúntame si estoy listo para continuar o si necesito aclaraciones.
Si digo que sí, pasa al siguiente concepto.
Si digo que no, reformula la explicación, proporciona ejemplos adicionales y guíame con pistas hasta que lo entienda.
Extra: prompt para aprender un tema
Después de cada sección importante, proporciona un mini-cuestionario de repaso o un resumen estructurado.
Anímame a reflexionar sobre lo que he aprendido y sugiere cómo podría aplicarlo en un proyecto o escenario del mundo real.”